﻿using System;

namespace Demo
{
    class Program
    {
        static void Main(string[] args)
        {
            
            //ForeachString();
            //StudentScore();
            //ArrayRank();
            //ArrayFind();
            //Mulitiply();
            //Squra();
            //Diamond();
            //SquraTwo();
           // InsertArrayRank();
           //Triangle();
           //EvenNumber();

            Console.Read();
        }

        public static void ForeachString()
        {
            Console.WriteLine("请输入字符串：");
            string str = Console.ReadLine();
            int letCount = 0, NumCount = 0, SepCount = 0;
            foreach (char c in str)
            {
                if (Char.IsLetter(c))
                {
                    letCount++;
                }
                else if (Char.IsNumber(c))
                {
                    NumCount++;
                }
                else if (Char.IsSeparator(c))
                {
                    SepCount++;
                }
            }
            Console.WriteLine("您输入的字符串中，字母有{0}个，数字有{1}个，空格有{2}个", letCount, NumCount, SepCount);
        }

        public static void StudentScore()
        {
            /* 在 Main 方法中创建一个 double 类型的数组，并在该数组中存入 5 名学生的考试成绩(控制台输入)，
             计算总成绩和平均成绩。要求使用foreach语句实现该功能， */
            double[] score = new double[5];
            for (int i = 0; i < score.Length; i++)
            {
                Console.WriteLine("请输入第{0}个学生的成绩", i + 1);
                score[i] = double.Parse(Console.ReadLine());
            }
            double sum = 0;
            double avg = 0;
            foreach (double item in score)
            {
                sum += item;
            }
            avg = sum / score.Length;
            Console.WriteLine("您输入的学生成绩总分为{0}分，平均分为{1}分", sum, avg);
        }

        public static void ArrayRank()
        {
            // 定义一个方法，实现一维数组的排序功能，从大到小排序。(不要用Array类的方法)
            int[] arr = { 4, 3, 5, 1, 2 };
            for (int i = 0; i < arr.Length; i++)
            {
                Console.Write(arr[i]);
            }
            Console.WriteLine();
            for (int i = 0; i < arr.Length; i++)
            {
                for (int j = 0; j < arr.Length - 1 - i; j++)
                {
                    if (arr[j] < arr[j + 1])
                    {
                        int temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
                }
            }
            for (int i = 0; i < arr.Length; i++)
            {
                Console.Write(arr[i]);
            }
        }

        public static void ArrayFind()
        {
            /* 实现查找数组元素索引的功能。
             定义一个数组，然后控制台输入要查找的元素，返回输入值在数组中最后一次出现的位置。
             若是找不到，请打印找不到。(不要用Array类的方法)*/
            Console.WriteLine("请输入您要查找的元素：");
            int num = int.Parse(Console.ReadLine());
            int[] arr = { 3, 4, 1, 2, 5 ,3};
            int index=-1;
            for (int i = 0; i < arr.Length; i++)
            {
                if (arr[i] == num)
                {
                   index=i;
                }
            }
            if(index!=-1){
                Console.WriteLine("您查找的{0}元素，最后一次出现的索引为{1}", num, index);
                return;
            }
            Console.WriteLine("您查找的{0}元素，在数组中不存在", num);
        }

        public static void Mulitiply()
        {
            /*
            1 * 1 = 1	
            2 * 1 = 2	2 * 2 = 4	
            3 * 1 = 3	3 * 2 = 6	3 * 3 = 9	
            4 * 1 = 4	4 * 2 = 8	4 * 3 = 12	4 * 4 = 16	
            5 * 1 = 5	5 * 2 = 10	5 * 3 = 15	5 * 4 = 20	5 * 5 = 25	
            6 * 1 = 6	6 * 2 = 12	6 * 3 = 18	6 * 4 = 24	6 * 5 = 30	6 * 6 = 36	
            7 * 1 = 7	7 * 2 = 14	7 * 3 = 21	7 * 4 = 28	7 * 5 = 35	7 * 6 = 42	7 * 7 = 49	
            8 * 1 = 8	8 * 2 = 16	8 * 3 = 24	8 * 4 = 32	8 * 5 = 40	8 * 6 = 48	8 * 7 = 56	8 * 8 = 64	
            9 * 1 = 9	9 * 2 = 18	9 * 3 = 27	9 * 4 = 36	9 * 5 = 45	9 * 6 = 54	9 * 7 = 63	9 * 8 = 72	9 * 9 = 81	
             */
            for (int i = 1; i < 10; i++)
            {
                for (int j = 1; j < i + 1; j++)
                {
                    Console.Write(i + "*" + j + "=" + (i * j) + "\t");
                }
                Console.WriteLine();
            }
        }

        public static void Squra()
        {
            //用户输入正方形边长，用*打印出空心正方形。
            Console.WriteLine("请输入正方形边长：");
            double r = double.Parse(Console.ReadLine());
            for (int i = 0; i < r; i++)
            {
                for (int j = 0; j < r; j++)
                {
                    if (i == 0)
                    {
                        Console.Write("*");
                    }
                    else if (i == (r - 1))
                    {
                        Console.Write("*");
                    }
                    else
                    {
                        if (j == 0)
                        {
                            Console.Write("*");
                        }
                        else if (j == (r - 1))
                        {
                            Console.Write("*");
                        }
                        else
                        {
                            Console.Write(" ");
                        }
                    }
                }
                Console.WriteLine();
            }

        }

        public static void Diamond()
        {
            /*
                        *
                       ***
                      *****
                       ***
                        *

              边长是3
            行列数就是5
            */
           Console.WriteLine("输入一个大于2的正奇数");//至少3行才能出一个菱形，输入一个偶数菱形就是这个偶数减1行
            int n = Convert.ToInt32(Console.ReadLine());
            for (int i = 1; i <= (n + 1) / 2; i++) //打印菱形的上面部分
            {
                for (int j = (n - 1) / 2; j >= i; j--)
                {    //打印空格
                    Console.Write(" ");
                }
                for (int k = 1; k <= i * 2 - 1; k++)
                {   //打印“*”号，第i行有i*2-1个“*”号
                    Console.Write("*");
                }
                Console.WriteLine();
            }
            for (int i = (n - 1) / 2; i >= 1; i--)//打印菱形下面的部分 与上面部分同理
            {
                for (int j = i - 1; j < (n - 1) / 2; j++)
                {
                    Console.Write(" ");
                }
                for (int k = 1; k <= i * 2 - 1; k++)
                {
                    Console.Write("*");
                }
                Console.WriteLine();
            }
        }

        public static void SquraTwo()
        {
            Console.WriteLine("请输入正方形边长：");
            double r = double.Parse(Console.ReadLine());
            for (int i = 0; i < r; i++)
            {
                for (int j = 0; j < r; j++)
                {
                    Console.Write("*");
                }
                Console.WriteLine();
            }
        }

        public static void InsertArrayRank() { 
            /*如果一个数组保存元素是有序的（从大到小），向这个数组中插入一个数，使得插入后的数组元素仍然保持有序。*/
            
                int[] Array = new int[5] { 81, 91, 18, 3, 14 };
                int[] Array1 = new int[6];
                int temp, index = 0, temp1 = 0;
                for (int i = 0; i < Array.Length - 1; i++)
                {
                    for (int k = 0; k < Array.Length - 1 - i; k++)
                    {
                        if (Array[k] < Array[k + 1])
                        {
                            temp = Array[k];
                            Array[k] = Array[k + 1];
                            Array[k + 1] = temp;
                        }
                    }
                } //给数组Array排序

                for (int p = 0; p < Array.Length; p++)
                {
                    Array1[p] = Array[p];
                } //把数组Array内的值过渡到Array1中

                Console.WriteLine("请输入要插入的数字");
                int Number = int.Parse(Console.ReadLine());
                for (int t = 0; t < Array1.Length - 1; t++)
                {
                    if (Number > Array1[t])
                    {
                        index = t;
                        break;
                    }
                    else if (Number < Array1[Array1.Length - 2])
                    {
                        index = 5;
                        break;
                    }

                } // 得到要插入的数在数组内的下标index

                for (int d = Array1.Length - 1; d <= index; d--) //因为0在最后所以是递减的
                {
                    //Array1[d] = Array1[d - 1];
                    if (d == index + 1)
                    {
                        temp1 = Array1[d - 1];
                        Array1[d] = temp1;
                        Array1[d - 1] = Number;
                        break;
                    } // 前两步是复制，和下面的作用一样因为会break跳出循环，第三步将数字替换掉前一位
                    else if (d > index)
                    {
                        temp1 = Array1[d - 1];
                        Array1[d - 1] = Array1[d - 2];
                        Array1[d] = temp1;
                    } //不满足第一个if判断时，把最后一个数复制为前一位的数，直到满足第一个if判断
                    if (d == index)
                    {
                        Array1[d] = Number;
                        break;
                    } //当Nubmer大于数组内的所有数，直接将Array[5]改为Number，然后跳出循环
                }

                for (int j = 0; j < Array1.Length; j++)
                {
                    Console.Write(Array1[j] + " ");
                } //输出出入了数字并且排好序的数组Array1

        }

        public static void Triangle() { 
            int[][] arr = new int[10][];
				for (int i = 0; i < arr.Length; i++)
				{
					arr[i] = new int[i + 1];
					arr[i][0] = arr[i][i] = 1;
					for (int j = 1; j < arr[i].Length - 1; j++)
					{
						arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
					}
				}
				for (int i = 0; i < arr.Length; i++)
				{
					for (int j = 0; j < arr[i].Length; j++)
					{
                    Console.Write(arr[i][j] + " "); 
					}
					 Console.WriteLine();
				}
            }
        	
		public static void EvenNumber() { 
            Console.WriteLine("存入的五个字符串分别为:" + "aa01"+",bb02"+",cc03"+ ",dd04"+ ",ee05");
            string[] strs = { "aa01", "bb02", "cc03", "dd04", "ee05" };
            Console.WriteLine("数组中下标是偶数的元素如下列所示为: ");
            for (int i = 0; i < strs.Length; i = i + 2)
            {
                Console.WriteLine(strs[i]);
            }
          
         }   
        /* public static void a() { 
             }*/
        
    }
}
